package com.nanyang.tms.service.company.impl;


import com.nanyang.common.core.annotation.SystemLog;
import com.nanyang.common.core.dict.CommonEnum;
import com.nanyang.common.core.domain.ApiResult;
import com.nanyang.common.core.exception.ExceptionProcessorUtils;
import com.nanyang.common.core.exception.ServiceException;
import com.nanyang.common.core.page.PageBean;
import com.nanyang.common.core.page.PageTableBean;
import com.nanyang.common.tool.utils.convert.BeanUtils;
import com.nanyang.tms.api.dto.request.companystored.CompanyStoredQueryRequest;
import com.nanyang.tms.api.dto.request.companystored.CompanyStoredUpdateStateRequest;
import com.nanyang.tms.api.dto.response.companystored.CompanyStoredAmountResponse;
import com.nanyang.tms.api.dto.response.companystored.CompanyStoredResponse;
import com.nanyang.tms.api.service.companystored.CompanyStoredRpcService;
import com.nanyang.tms.dao.company.CompanyStoredDao;
import com.nanyang.tms.domain.company.CompanyStoredDO;
import com.nanyang.tms.domain.company.CompanyStoredQuery;
import com.nanyang.tms.domain.company.CompanyStoredVO;
import com.nanyang.tms.manager.company.CompanyStoredManager;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Objects;

@Slf4j
@Service(version = "1.0.0", timeout = 10000, retries = 0, validation = "true")
public class CompanyStoredRpcServiceImpl implements CompanyStoredRpcService {
    @Autowired
    private CompanyStoredManager companyStoredManager;
    @Autowired
    private CompanyStoredDao companyStoredDao;
    @Override
    public ApiResult<PageBean<CompanyStoredResponse>> listCompanyStored(CompanyStoredQueryRequest param) {
        ApiResult<PageBean<CompanyStoredResponse>> apiResult = new ApiResult<>();
        try {
            param.requestCheck();
            CompanyStoredQuery query = new CompanyStoredQuery();
            BeanUtils.copyProperties(param, query);
            PageBean<CompanyStoredVO> companyStoredList = companyStoredManager.listCompanyStored(query);
            PageBean<CompanyStoredResponse> resultList = new PageTableBean<>(query.getPageIndex(), query.getPageSize());
            resultList.setTotalItem(companyStoredList.getTotalItem());
            BeanUtils.copyListProperties(companyStoredList.getData(), resultList.getData(), CompanyStoredResponse.class);
            apiResult.setCode(CommonEnum.REQUEST_SUCCESS.getCode());
            apiResult.setMessage(CommonEnum.REQUEST_SUCCESS.getMessage());
            apiResult.setData(resultList);
        } catch (Exception e) {
            log.error(CommonEnum.SYSTEM_EXCEPTION.getMessage(), e);
            ExceptionProcessorUtils.wrapperHandlerException(apiResult, e);
        }
        return apiResult;
    }
    @Override
    public ApiResult<CompanyStoredResponse> selectByCode(String companyCode) {
        ApiResult<CompanyStoredResponse> result = new ApiResult<>();
        try {
            CompanyStoredResponse  companyStoredResult = new CompanyStoredResponse();
            CompanyStoredVO companyStoredVO = companyStoredDao.selectByCode(companyCode);
            if(Objects.isNull(companyStoredVO)){
                throw new ServiceException(CommonEnum.NO_CONTENT.getCode(),CommonEnum.NO_CONTENT.getMessage());
            }
            BeanUtils.copyProperties(companyStoredVO,  companyStoredResult);
            result.setCode(CommonEnum.REQUEST_SUCCESS.getCode());
            result.setMessage(CommonEnum.REQUEST_SUCCESS.getMessage());
            result.setData( companyStoredResult);
        } catch (Exception e) {
            log.error(CommonEnum.SYSTEM_EXCEPTION.getMessage(), e);
            ExceptionProcessorUtils.wrapperHandlerException(result, e);
        }
        return result;
    }
    @Override
    public ApiResult<CompanyStoredAmountResponse> storedInfo(String companyCode) {
        ApiResult<CompanyStoredAmountResponse> result = new ApiResult<>();
        try {
            CompanyStoredAmountResponse  response = new CompanyStoredAmountResponse();
            CompanyStoredVO companyStoredVO = companyStoredDao.selectByCode(companyCode);
            if(Objects.isNull(companyStoredVO)){
                throw new ServiceException(CommonEnum.NO_CONTENT.getCode(),CommonEnum.NO_CONTENT.getMessage());
            }
            BeanUtils.copyProperties(companyStoredVO,  response);
            result.setCode(CommonEnum.REQUEST_SUCCESS.getCode());
            result.setMessage(CommonEnum.REQUEST_SUCCESS.getMessage());
            result.setData( response);
        } catch (Exception e) {
            log.error(CommonEnum.SYSTEM_EXCEPTION.getMessage(), e);
            ExceptionProcessorUtils.wrapperHandlerException(result, e);
        }
        return result;
    }
    @SystemLog(module =SystemLog.Module.STORED,template="storedDisable")
    @Override
    public ApiResult<Boolean> disableState(CompanyStoredUpdateStateRequest param) {
        ApiResult<Boolean> result = new ApiResult<>();
        try {
            param.requestCheck();
            CompanyStoredDO companyStoredDo = new  CompanyStoredDO();
            BeanUtils.copyProperties(param,companyStoredDo);
            companyStoredDo.setGmtModifiedPin(param.getPin());
            companyStoredDao.disableState(companyStoredDo);
            result.setCode(CommonEnum.REQUEST_SUCCESS.getCode());
            result.setMessage(CommonEnum.REQUEST_SUCCESS.getMessage());
            result.setData(true);
        } catch (Exception e) {
            log.error(CommonEnum.SYSTEM_EXCEPTION.getMessage(), e);
            ExceptionProcessorUtils.wrapperHandlerException(result, e);
        }
        return result;
    }
    @SystemLog(module =SystemLog.Module.STORED,template="storedEnable")
    @Override
    public ApiResult<Boolean> enableState(CompanyStoredUpdateStateRequest param) {
        ApiResult<Boolean> result = new ApiResult<>();
        try {
            param.requestCheck();
            CompanyStoredDO companyStoredDo = new  CompanyStoredDO();
            BeanUtils.copyProperties(param,companyStoredDo);
            companyStoredDo.setGmtModifiedPin(param.getPin());
            companyStoredDao.enableState(companyStoredDo);
            result.setCode(CommonEnum.REQUEST_SUCCESS.getCode());
            result.setMessage(CommonEnum.REQUEST_SUCCESS.getMessage());
            result.setData(true);
        } catch (Exception e) {
            log.error(CommonEnum.SYSTEM_EXCEPTION.getMessage(), e);
            ExceptionProcessorUtils.wrapperHandlerException(result, e);
        }
        return result;
    }
}
